Various mobile and non-mobile computing devices underlie many applications and computing services. Such devices may be used for various forms of communication (e.g., voice calls and text messaging) as well as providing various functionality such as accessing and displaying websites, sending and receiving e-mails, taking and displaying photographs and videos, playing music and other forms of audio, creating digital content, and so forth. These, and numerous other functionalities, are generally performed by software applications either in the form of software components that are built-in to the mobile or non-mobile device's operating system or separate applications that run on top of the operating system.
Numerous competing manufacturers, developers, and other service providers offer hardware, software, or combinations of both hardware and software. As a result, a number of dissimilar and incompatible device platforms and environments have been developed. Some of the differences among these devices include their hardware components, operating systems and input and output capabilities. Some of the most widely used devices use different operating systems (e.g., Windows, iOS, Android and so forth), many of which have their own programming environments and software development tools.
Developing applications for different systems and devices often involves using various programming languages and specific techniques or code for different operating systems, hardware and so forth. As a result, many applications are not portable across devices or systems and developers often rewrite substantial portions of an application to support different devices.